package com.demo.base.util;

import org.apache.commons.lang3.StringUtils;

/**
 * 字符串工具类（主要使用APACHE提供的字符串工具类）
 */
public class StringUtil {

	/**
	 * 去空 如果是NULL则返回空字符
	 * @param str
	 * @return
	 */
	public static String delNull(String str) {
		if (str == null) {
			str = "";
		}
		return str;
	}

	/**
	 * 从str字符串中提取中文字符，并保留英文字符
	 * @param str
	 * @return
	 */
	public static String getChineseStr(String str) {
		String rs = "";
		if (!CommonUtil.isNull(str)) {
			rs = str.replaceAll("[^0-9a-zA-Z\\u4e00-\\u9fa5]", "");
		}
		return rs;
	}

	/**
	 * 把多行文本框里输入并保存到数据库的内容转换成HTML显示
	 * 
	 * @param s
	 * @return
	 */
	public static String toHtml(String s) {
		s = delNull(s);
		s = Replace(s, "<", "&lt;");
		s = Replace(s, ">", "&gt;");
		s = Replace(s, "\t", "    ");
		s = Replace(s, "\r\n", "<br>");
		s = Replace(s, "\n", "<br>");
		s = Replace(s, " ", "&nbsp;");
		return s;
	}

	/**
	 * 把多行文本框里输入并保存到数据库的内容转换成HTML显示
	 * 
	 * @param source
	 * @param oldString
	 * @param newString
	 * @return
	 */
	public static String Replace(String source, String oldString, String newString) {
		if (source == null)
			return "";
		StringBuffer output = new StringBuffer();
		Integer lengOfSource = source.length();
		Integer lengOfOld = oldString.length();
		Integer posStart = 0;
		Integer pos;
		while ((pos = source.indexOf(oldString, posStart)) >= 0) {
			output.append(source.substring(posStart, pos));
			output.append(newString);
			posStart = pos + lengOfOld;
		}

		if (posStart < lengOfSource)
			output.append(source.substring(posStart));
		return output.toString();
	}

	/**
	 * 去掉HTML标签
	 * @param str
	 * @return
	 */
	public static String delHTML(String str) {
		str = str.replaceAll("</?[^>]+>", "");
		return str;
	}

	/**
	 * 检查空字符串 
	 * @param str
	 * @return
	 */
	public static boolean isBlank(String str) {
		return StringUtils.isBlank(str);
	}

	/**
	 * 清除空白字符
	 * @param str
	 * @return
	 */
	public static String trim(String str) {
		return StringUtils.trim(str);
	}

	/**
	 * 取得字符串的缩写
	 * @param str
	 * @param maxWidth
	 * @return
	 */
	public static String abbreviate(String str, int maxWidth) {
		return StringUtils.abbreviate(str, maxWidth);
	}

	/**
	 * 劈分字符串
	 * @param str
	 * @param separatorChars
	 * @return
	 */
	public static String[] split(String str, String separatorChars) {
		return StringUtils.split(str, separatorChars);
	}

	/**
	 * 将数组合并为字符串
	 * @param array
	 * @param separator
	 * @return
	 */
	public static String join(String[] array, String separator) {
		return StringUtils.join(array, separator);
	}

	/**
	 * 截取字符串
	 * @param str
	 * @param start
	 * @return
	 */
	public static String substring(String str, int start) {
		return StringUtils.substring(str, start);
	}

	/**
	 * 截取字符串
	 * @param str
	 * @param start
	 * @param end
	 * @return
	 */
	public static String substring(String str, int start, int end) {
		return StringUtils.substring(str, start, end);
	}

	/**
	 * 字符串截取，超出部分添加省略号
	 * 
	 * @param str
	 * @param num
	 * @return
	 * @throws Exception
	 */
	public static String cutString(String str, int num) {
		if (str != null && str.length() > num) {
			str = str.substring(0, num) + "...";
		}
		return str;
	}

	/**
	 * 截取嵌套字符串
	 * @param str
	 * @param open
	 * @param close
	 * @return
	 */
	public static String substringBetween(String str, String open, String close) {
		return StringUtils.substringBetween(str, open, close);
	}

	/**
	 * 判断两个字符串是否相等，有非空处理
	 * @param str1
	 * @param str2
	 * @return
	 */
	public static boolean equals(String str1, String str2) {
		return StringUtils.equals(str1, str2);
	}

	public static boolean equals(Integer str1, Integer str2) {
		if (str1 != null && str2 != null) {
			return str1.equals(str2);
		} else {
			return false;
		}
	}

	/**
	 * 返回要查找的字符串所在位置，有非空处理
	 * @param str
	 * @param searchStr
	 * @return
	 */
	public static int indexOf(String str, String searchStr) {
		return StringUtils.indexOf(str, searchStr);
	}

	/**
	 * 将字符串中的首字母大写
	 * @param str
	 * @return
	 */
	public static String capitalize(String str) {
		return StringUtils.capitalize(str);
	}

	/**
	 * 取得某字符串在另一字符串中出现的次数
	 * @param str
	 * @param sub
	 * @return
	 */
	public static int countMatches(String str, String sub) {
		return StringUtils.countMatches(str, sub);
	}

	/**
	 * 字符串str不足num位数的，在前面补齐"0"
	 * @param str 要处理的字符串
	 * @param num 处理后的长度
	 * @return
	 */
	public static String addZero(String str, long num) {
		StringBuffer ss = new StringBuffer();
		while (ss.length() != num - str.length()) {
			ss.append("0");
		}
		ss.append(str);
		return ss.toString();
	}

	/**
	 * 字符串str不足num位数的，在前面补齐"0"
	 * @param str 要处理的字符串
	 * @param num 处理后的长度
	 * @return
	 */
	public static String addZero(int s, long num) {
		return StringUtil.addZero(String.valueOf(s), num);
	}

	/**
	 * 查找字符串数组中指定指字符所在的坐位置
	 * @param arr　数组
	 * @param str　字符串
	 * @return
	 */
	public static int queryStrings(String[] arr, String str) {
		if (arr != null && arr.length > 0 && str != null) {
			for (int i = 0; i < arr.length; i++) {
				if (str.equals(arr[i]))
					return i;
			}
		}
		return -1;
	}

	/**
	 * 生成一个随机的字符串（手机验证码）
	 * @param numberFlag 是否只生成数字
	 * @param length 生成字符串长度
	 * @return
	 */
	public static String createRandom(boolean numberFlag, int length) {
		String retStr = "";
		String strTable = numberFlag ? "1234567890" : "1234567890";
		int len = strTable.length();
		boolean bDone = true;
		while (bDone) {
			retStr = "";
			int count = 0;
			for (int i = 0; i < length; i++) {
				double dblR = Math.random() * len;
				int intR = (int) Math.floor(dblR);
				char c = strTable.charAt(intR);
				if (('0' <= c) && (c <= '9')) {
					count++;
				}
				retStr += strTable.charAt(intR);
			}
			if (count >= 2) {
				bDone = false;
			}
		}
		return retStr;
	}
}
